/*用户服务模块*/
#include "head.h"


/*是用户还是管理员登录*/
int who_up(int sockfd,int id)
{
    int ret=0;
    char buf[4] = {0};
    char buf_1[16];
    if ((ret = recv(sockfd, buf, sizeof(buf), 0)) < 0) 
    {
        printf("%s\n", buf);
        perror("recv");
        close(sockfd);
        return 9;
    }
    else if (ret == 0)
    {
        return 9; // 当客户端断开，返回9，退出功能选项，服务器也断开
    }
    printf("登录的是%s\n",buf);
    if(strcmp(buf,"use")==0)
    {
        sprintf(buf_1,"%d",id);
        if(send(sockfd,buf_1,16,0)<0)         //发送ID
        {
            perror("send");
        } 
        return 1;
    }
    else
    {
        sprintf(buf_1,"%d",id);
        if(send(sockfd,buf_1,16,0)<0)         //发送ID
        {
            perror("send");
        } 
        return 0;
    }

}

/*用户/管理员选择模块*/
int function(int sockfd, int id,int f)
{
    int i = 0;
    int ret=0;
    char buf[4] = {0};
    //char buf_1[16];
    char buf_2[3];
 
    if((ret=recv(sockfd,buf_2,3,0))<0)    //收到功能请求
    {
        perror("recv");
        return 0;
    }
    if(ret==0)
    {
        return 9;
    }

    i = atoi(buf_2);
    

    if(f==1)
    {
        return use_menu(sockfd,id,i);
    }
    else
    {
        return adm_menu(sockfd,id,i);
    }
}

/*用户功能菜单*/
int use_menu(int sockfd,int id,int i)
{
    switch (i)
    {
    case 1:
    {
        printf("查询单号\n");
        search_id(sockfd,id);
    }
    break;
    case 2:
    {
        printf("物流点查询\n");
        search_point(sockfd,id);
    }
    break;
    case 3:
    {
        printf("费用查询\n");
        search_fee(sockfd,id);
    }
    break;
    case 4:
    {
        printf("订单追踪\n");
        search_location(sockfd,id);
    }
    break;
    case 5:
    {
        printf("账号管理\n");
        while(1)
        {
            int f=modfiy_user(sockfd,id);
            if(f==15)
                return 9;       //注销账号成功
            if(f==1)
                break;          //修改密码成功
        }
    }
    break;
    case 0:
    {
        printf("退出程序\n");
        return 9;
    }
    break;
    default:
        printf("输入无效\n");
        break;
    }
    return 0;
}

/*用户单号查询模块*/
void search_id(int sockfd,int id)
{
    char buf[32]={"进行单号查询"};
    char buf_1[2];
    if(send(sockfd,buf,32,0)<0)     //回复客户端进行查询单号
    {
        perror("send");
        return ;
    }

    if(recv(sockfd,buf_1,2,0)<0)         //收到客户端准备好
    {
        perror("recv");
        return ;
    }
    printf("查询的物流点%s\n",buf_1);
    data_flow_id(sockfd,id);
    return ;

}

/*用户物流点查询模块*/
void search_point(int sockfd,int id)
{
    char buf[32]={"进行物流点查询"};
    char buf_1[24];

    if(send(sockfd,buf,32,0)<0)     //回复客户端进行查询单号
    {
        perror("send");
        return ;
    }

    if(recv(sockfd,buf_1,24,0)<0)         //收到客户端的地点
    {
        perror("recv");
        return ;
    }
 
    data_point(sockfd,buf_1);
    return ;
}

/*用户物流费用查询模块*/
void search_fee(int sockfd,int id)
{
    char buf_1[16];
    if(send(sockfd,"费用查询功能",32,0)<0)
    {
        perror("send");
        return ;
    }
    if(recv(sockfd,buf_1,16,0)<0)     
    {
        perror("recv");
        return ;
    }
    data_fee(sockfd,buf_1);
    return ;
}

/*用户物流追踪模块*/
void search_location(int sockfd,int id)
{
    char buf[16];
    if(send(sockfd,"查询单号功能",32,0)<0)         //服务器回复。进行查询单号功能
    {
        perror("send");
        return ;
    }

    if(recv(sockfd,buf,16,0)<0)           
    {
        perror("recv");
        return ;
    }
 
    data_flow_location(sockfd,buf);
    return ;
}

/*用户账号管理模块*/
int modfiy_user(int sockfd,int id)
{
    int i=0;
    char a[16] = {0};
    char buf[6] = {0};
    char buf_1[16] = {"物流用户"};
    if (-1 == send(sockfd, "请输入要进行的选项:", 33, 0))
    {
        perror("send");
        close(sockfd);
        exit(-1);
    }
    i = recv(sockfd, buf, sizeof(buf), 0); // 接收要user操作
    if (i < 0)
    {
        perror("recv");
        return -1;
    }
    i = atoi(buf);

    MYSQL *mysql = mysql_op(buf_1);

    switch (i)
    {
    case 1:
    {
        printf("进入注销用户账号\n");
        int i = mysql_delete(&mysql, id);
        if (i == 1)
        {
            if (-1 == send(sockfd, "注销账号成功", 25, 0))
            {
                perror("send");
                //close(sockfd);
                
            }
            return 15;
        }
        else
        {
            if (-1 == send(sockfd, "注销账号失败", 25, 0))
            {
                perror("send");
                //close(sockfd);
            }
        }
    }
    break;
    case 2:
    {
        printf("进入修改信息...\n");
        if (-1 == send(sockfd, "请输入要修改成的密码", 32, 0))
        {
            perror("send");
            break;
        }
        printf("接收新密码\n");
        int i = recv(sockfd, a, sizeof(a), 0); // 接收新密码
        if (i < 0)
        {
            perror("recv");
            break;
        }
        if (1 == mysql_modfiy(&mysql, a, id))
        {
            if (-1 == send(sockfd, "修改密码成功", 25, 0))
            {
                perror("send");
                close(sockfd);
            }
            mysql_close(mysql);
            return 1;
        }
        else
        {
            if (-1 == send(sockfd, "修改密码失败", 25, 0))
            {
                perror("send");
                close(sockfd);
            }
        }
    }
    break;
    }

    mysql_close(mysql);
    return -1;
}

/*管理员功能目录*/
int adm_menu(int sockfd,int id,int i)
{
    switch (i)
    {
    case 1:
    {
        printf("查询所有单号\n");
        search_all_info(sockfd,id);
    }
    break;
    case 2:
    {
        printf("物流信息录入\n");
        insert_info(sockfd,id);
    }
    break;
    case 3:
    {
        printf("物理信息更新\n");
        update_info(sockfd,id);
    }
    break;
    case 4:
    {
        printf("物流信息删除\n");
        delete_info(sockfd,id);
    }
    break;
    case 5:
    {
        printf("添加管理员\n");
        add_admin(sockfd);
    }
    break;
    case 0:
    {
        printf("退出程序\n");
        return 9;
    }
    break;
    default:
        printf("输入无效\n");
        break;
    } 
    return i;
}

/*添加管理员*/
void add_admin(int sockfd)
{
    char l[2];
    char buf[32]={"注册成功"};
    requst p;
    
    if(send(sockfd,"添加管理员",32,0)<0)     //回复客户端进行管理员添加
    {
        perror("send");
        return ;
    }

    recv(sockfd, l, sizeof(l), 0);
    
    if(recv(sockfd,&p,sizeof(p),0)<0)     //回复客户端进行管理员添加
    {
        perror("send");
        return ;
    }

    info_2(p);

    send(sockfd, buf, 32, 0);

}

/*管理员查询订单模块*/
void search_all_info(int sockfd,int id)
{

    adm_flow_search(sockfd);
    return ;

}

/*管理员添加信息模块*/
void insert_info(int sockfd,int id)
{

    if(send(sockfd,"开始录入订单信息",32,0)<0)         //服务器发客户端，请录入订单信息；
    {
        perror("recv");
        return ;
    }

    adm_recv_flow(sockfd);
}


/*管理员更新物流信息*/
void update_info(int sockfd,int id)
{
    //char buf_1[10];
    if(send(sockfd,"进行物流信息更新",32,0)<0)         //服务器回复。进行什么功能
    {
        perror("send");
        return ;
    }
 
    adm_uodate_flow(sockfd);
}

/*管理员删除物流信息*/
void delete_info(int sockfd,int id)
{
    if(send(sockfd,"请输入要删除的单号",32,0)<0)         //服务器回复。进行什么功能
    {
        perror("send");
        return ;
    }
    adm_delete_flow(sockfd);
    return ;
}

